package com.kamistoat.meimeistore.order.service.impl;

import org.springframework.stereotype.Service;

import java.util.Map;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kamistoat.common.utils.PageUtils;
import com.kamistoat.common.utils.Query;

import com.kamistoat.meimeistore.order.dao.OrderItemDao;
import com.kamistoat.meimeistore.order.entity.OrderItemEntity;
import com.kamistoat.meimeistore.order.service.OrderItemService;


@Service("orderItemService")
public class OrderItemServiceImpl extends ServiceImpl<OrderItemDao, OrderItemEntity> implements OrderItemService {

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<OrderItemEntity> page = this.page(
                new Query<OrderItemEntity>().getPage(params),
                new QueryWrapper<OrderItemEntity>()
        );

        return new PageUtils(page);
    }

    // 因为后来我把spring.news队列删了，所以这个监听器如果开着会报警告。所以注掉了
//    /**
//     * 测试用。监听Rabbit消息队列
//     * 用@RabbitListener(queues = {"spring.news"})指定要监听的队列名称。这里可以指定多个队列，使用逗号隔开
//     * <p>
//     * 输入参数有三个可选值：
//     *
//     * @param message     监听消息队列传递来的原生内容。实际上是一个 org.springframework.amqp.core.Message 类型的数据
//     *                    使用Message.getBody()可以得到消息体。存放JSON格式的真实数据
//     *                    使用Message.getMessageProperties()可以获得消息头。存放数据的属性信息
//     * @param orderEntity 如果在已知消息队列中的数据到底是什么类型的情况下，可以直接把对应类型作为第二个输入参数
//     *                    RabbitListener会自动把Object消息体中的JSON数据映射成指定的泛型，放在第二个输入参数中
//     *                    <p>
//     *                    当然，不加第二个参数，手动使用FastJSON去进行转换也是可以的
//     * @param channel     当前消息消费者与消息服务所连接的通道。注意这个接口的包是 com.rabbitmq.client.Channel 包
//     */
//    @RabbitListener(queues = {"spring.news"})
//    public void listenRabbit(Message message, OrderEntity orderEntity, Channel channel) {
//        System.out.println("接收到消息...内容：" + message);
//        System.out.println("自动转换..." + orderEntity);
//        // 是单次传输过程(即系统不宕机)，通道内消息传递的个数。第一个来的消息该值就是1，第10个来的消息该值就是10
//        long deliveryTag = message.getMessageProperties().getDeliveryTag();
//        try {
//            // 使用channel.basicAsk(通道内消息编号，是否批量执行回调)
//            channel.basicAck(deliveryTag,false);
//            System.out.println("通道内第"+deliveryTag+"个消息消费完成");
//        } catch (IOException e) {
//            // 出异常一般就是消费端宕机了，回调发不出去了
//            e.printStackTrace();
//        }
//    }
}